package br.com.esporte.apresentacao.infra.componente.itemDiaPraticadoGrupo;

import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.resource.PackageResourceReference;

import br.com.esporte.apresentacao.grupoEsporteGrupo.partida.cadastro.PaginaCadastroPartida;
import br.com.esporte.apresentacao.infra.componente.ComponenteGenerico;
import br.com.esporte.apresentacao.infra.componente.menu.MenuEnum;
import br.com.esporte.apresentacao.infra.generic.Pagina;
import br.com.esporte.apresentacao.util.Constantes;
import br.com.esporte.negocios.entidade.imp.DiaPraticadoGrupo;
import br.com.esporte.negocios.entidade.imp.Partida;
import br.com.esporte.negocios.entidade.imp.Usuario;
import br.com.esporte.negocios.entidade.util.TipoEsporteGrupoEnum;
import br.com.esporte.negocios.util.Util;

/**
 * 
 * @author Milton Domingues
 *
 */
public class ItemDiaPraticadoGrupo extends ComponenteGenerico {

	private static final long serialVersionUID = 1L;

	private String NAO_ESCOLHIDO = "nao_escolhido";
	private String CONTAINER_CLASS = "diaPraticadoGrupo-item-";
	private String INFORMACOES_CLASS = "diaPraticadoGrupo-item-container-informacoes-";
	private String DESTAQUES_CLASS = "diaPraticadoGrupo-item-container-destaques-";
	private String IMG_CLASS = "diaPraticadoGrupo-item-img-";

	private DiaPraticadoGrupo diaPraticadoGrupo;
	private Pagina paginaRetorno;
	private MenuEnum menuHome;

	public ItemDiaPraticadoGrupo(String id, DiaPraticadoGrupo diaPraticadoGrupo, Pagina paginaRetorno, MenuEnum menuHome) {
		super(id);
		this.setDiaPraticadoGrupo(diaPraticadoGrupo);
		this.setMenuHome(menuHome);
		this.setPaginaRetorno(paginaRetorno);
		this.montarComponente();
	}

	private WebMarkupContainer criarDiaPraticadoDestaques(TipoEsporteGrupoEnum tipoEsporte){
		WebMarkupContainer destaque = new WebMarkupContainer("diaPraticadoDestaques");
		destaque.add(new AttributeAppender("class", new Model<String>(this.DESTAQUES_CLASS + tipoEsporte.getCodigo()), " "));
		destaque.add(this.criarImagemDestaque("maiorPontuador", null));
		destaque.add(this.criarImagemDestaque("melhorVotado", null));
		destaque.add(this.criarImagemDestaque("piorVotado", null));

		return destaque;
	}

	private WebMarkupContainer criarDiaPraticadoInformacoes(TipoEsporteGrupoEnum tipoEsporte){
		WebMarkupContainer informacoes = new WebMarkupContainer("diaPraticadoInformacoes");
		informacoes.add(new AttributeAppender("class", new Model<String>(this.INFORMACOES_CLASS + tipoEsporte.getCodigo()), " "));

		WebMarkupContainer img = new WebMarkupContainer("img");
		img.add(new AttributeAppender("class", new Model<String>(this.IMG_CLASS + tipoEsporte.getCodigo()), " "));

		informacoes.add(img);

		informacoes.add(new Label("data", Util.coverterDataStringExtenso(this.getDiaPraticadoGrupo().getDataHoraInicio())));
		informacoes.add(new Label("horaInicio", Util.converterHoraToString(this.getDiaPraticadoGrupo().getDataHoraInicio())));
		informacoes.add(new Label("horaFim", Util.converterHoraToString(this.getDiaPraticadoGrupo().getDataHoraFim())));
		informacoes.add(new Link<Partida>("adicionar") {

			private static final long serialVersionUID = 1L;

			@Override
			public void onClick() {
				Partida partida = new Partida();
				partida.setDiaPraticado(ItemDiaPraticadoGrupo.this.getDiaPraticadoGrupo());
				this.setResponsePage(new PaginaCadastroPartida(partida, ItemDiaPraticadoGrupo.this.getDiaPraticadoGrupo().getGrupo(), ItemDiaPraticadoGrupo.this.getPaginaRetorno(), ItemDiaPraticadoGrupo.this.getMenuHome()));
			}
		}.add(new Label("labelLink", "adicionar")));

		return informacoes;
	}

	private Image criarImagemDestaque(String id, Usuario usuario){
		Image image = null;
		if(usuario != null){
			image = new Image(id, "");
			image.add(new SimpleAttributeModifier("src", new PackageResourceReference(Constantes.getPathImageUsuario(usuario.getImagem())).getName()));
		}else{
			image = new Image(id, new PackageResourceReference(ItemDiaPraticadoGrupo.class, Constantes.CAMINHO_IMG + this.NAO_ESCOLHIDO + Constantes.PNG).getName());
		}
		return image;
	}

	public DiaPraticadoGrupo getDiaPraticadoGrupo() {
		return this.diaPraticadoGrupo;
	}

	public MenuEnum getMenuHome() {
		return this.menuHome;
	}

	public Pagina getPaginaRetorno() {
		return this.paginaRetorno;
	}

	private TipoEsporteGrupoEnum getTipoEsporte(){
		return this.getDiaPraticadoGrupo().getGrupo().getTipo();
	}

	@Override
	public void montarComponente() {

		TipoEsporteGrupoEnum tipoEsporte = this.getTipoEsporte();

		WebMarkupContainer container = new WebMarkupContainer("diaPraticadoContainer");
		container.add(new AttributeAppender("class", new Model<String>(this.CONTAINER_CLASS + tipoEsporte.getCodigo()), " "));

		container.add(this.criarDiaPraticadoInformacoes(tipoEsporte));
		container.add(this.criarDiaPraticadoDestaques(tipoEsporte));

		this.add(container);
	}

	/**
	 * Css do componente
	 */
	@Override
	public void renderHead(IHeaderResponse response) {
		response.renderCSSReference(new PackageResourceReference(ItemDiaPraticadoGrupo.class, "css/ItemDiaPraticadoGrupo.css"));
	}

	public void setDiaPraticadoGrupo(DiaPraticadoGrupo diaPraticadoGrupo) {
		this.diaPraticadoGrupo = diaPraticadoGrupo;
	}

	public void setMenuHome(MenuEnum menuHome) {
		this.menuHome = menuHome;
	}

	public void setPaginaRetorno(Pagina paginaRetorno) {
		this.paginaRetorno = paginaRetorno;
	}

}
